package chapter10.innerclass;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

//匿名内部类既有类的特征，又有创建对象的特征。记住语法
public class AnonymousInnerClassDetail {
    public static void main(String[] args) {
        new Outer05().f1();
    }
}

class Outer05 {
    private int n1 = 99;

    public void f1() {
//        匿名内部类不能添加访问修饰符
//        作用域，仅在定义的代码块中可用。
//        外部其他类不能方位匿名内部类
//        如果外部类和匿名内部类的成员重的话，匿名内部类访问的话，遵循就近原则
//        如果想访问外部类的成员可以用外部类的类名.this.成员名
        Person p = new Person() {
            @Override
            public void hi() {
                int n1 = 1;
                System.out.println("重写了hi方法");
                System.out.println("访问外部类的所有属性包括私有的"+n1);
                System.out.println("调用外部类的属性"+Outer05.this.n1);
            }

        };
//       第一种调用方式
        p.hi();//动态绑定机制
//        第二种调用方式
        new Person() {
            @Override
            public void hi() {
                System.out.println("hahahah");
            }


        }.ok(".....laji");
    }
}

class Person {
    public void hi() {
        System.out.println("Person的hi方法");
    }
    public void ok(String str){
        System.out.println("okokokok"+str);
    }
}
